#ifndef __NCU_INFO_H
#define __NCU_INFO_H

typedef struct{
  unsigned int addr;
  unsigned int val;
}ncu_reg_info_t;

typedef struct{
  unsigned int is_ff;
  unsigned int loop_tmp;

  //resolution
  unsigned int width;
  unsigned int height;

  //source and desitination buffer arrangement
  unsigned int cur_addr;
  unsigned int out_addr;
  unsigned int psn_addr;
  unsigned int last_addr;


  ncu_reg_info_t reg_cfg[50];

//-------------------------------------
//-------------------------------------
  //Function enable
  unsigned int tdns_en;
  unsigned int sdns_en;
  unsigned int shrp_en;
  unsigned int sdns_mv_use_en;
  unsigned int lst_frm_mode;
  unsigned int lum_calc_window;


  //Cut value
  unsigned int high_cut;
  unsigned int low_cut;

  //Normal temporal denoise
  unsigned int tdns_max_thres;
  unsigned int tdns_min_thres;
  unsigned int tdns_strength;
  unsigned int tdns_slope;
  unsigned int tdns_peak_adjust;
  unsigned int tdns_abs_mode;

  //psn parameters
  unsigned int psn_number;
  unsigned int psn_stre_max;
  unsigned int psn_incr_stre;
  unsigned int psn_incr_stre_max;

  //Normal spatial denoise
  unsigned int sdns_mv_thres;
  unsigned int sdns_edge_thres;
  unsigned int sdns_edge_ratio;
  unsigned int sdns_hv_thres;
  unsigned int sdns_hv_ratio;
  unsigned int sdns_aa_thres;
  unsigned int sdns_edge_calc_abs_mode;
  unsigned int sdns_edge_calc_window;
  unsigned int sdns_edge_cmp_mode;
  unsigned int sdns_smo_central_en;
  unsigned int sdns_smo_window   ;
  unsigned int sdns_smo_max_thres;
  unsigned int sdns_smo_min_thres;
  unsigned int sdns_smo_strength;
  unsigned int sdns_smo_slope;
  unsigned int sdns_smo_peak_adjust;
  unsigned int sdns_tex_central_en   ;
  unsigned int sdns_tex_window   ;
  unsigned int sdns_tex_use_edge ;
  unsigned int sdns_tex_max_thres;
  unsigned int sdns_tex_min_thres;
  unsigned int sdns_tex_strength;
  unsigned int sdns_tex_slope;
  unsigned int sdns_tex_peak_adjust;
  unsigned int sdns_smo_mo_central_en   ;
  unsigned int sdns_smo_mo_window   ;
  unsigned int sdns_smo_mo_max_thres;
  unsigned int sdns_smo_mo_min_thres;
  unsigned int sdns_smo_mo_strength;
  unsigned int sdns_smo_mo_slope;
  unsigned int sdns_smo_mo_peak_adjust;
  unsigned int sdns_tex_mo_central_en   ;
  unsigned int sdns_tex_mo_window   ;
  unsigned int sdns_tex_mo_use_edge ;
  unsigned int sdns_tex_mo_max_thres;
  unsigned int sdns_tex_mo_min_thres;
  unsigned int sdns_tex_mo_strength;
  unsigned int sdns_tex_mo_slope;
  unsigned int sdns_tex_mo_peak_adjust;

  //Dark area denoise
  unsigned int dk_y_thres;
  unsigned int dk_tdns_max_thres;
  unsigned int dk_tdns_min_thres;
  unsigned int dk_tdns_strength;
  unsigned int dk_tdns_slope;
  unsigned int dk_tdns_peak_adjust;
  unsigned int sdns_dk_hv_thres;
  unsigned int sdns_dk_hv_thres_step;
  unsigned int sdns_dk_hv_thres_dir;
  unsigned int sdns_dk_aa_thres;
  unsigned int sdns_dk_aa_thres_step;
  unsigned int sdns_dk_aa_thres_dir;
  unsigned int sdns_dk_window;
  unsigned int sdns_dk_max_thres;
  unsigned int sdns_dk_min_thres;
  unsigned int sdns_dk_thres_step;
  unsigned int sdns_dk_thres_dir;
  unsigned int sdns_dk_strength;
  unsigned int sdns_dk_slope;
  unsigned int sdns_dk_peak_adjust;

  //Bright area denoise
  unsigned int br_y_thres;
  unsigned int br_tdns_max_thres;
  unsigned int br_tdns_min_thres;
  unsigned int br_tdns_strength;
  unsigned int br_tdns_slope;
  unsigned int br_tdns_peak_adjust;
  unsigned int sdns_br_hv_thres;
  unsigned int sdns_br_hv_thres_step;
  unsigned int sdns_br_hv_thres_dir;
  unsigned int sdns_br_aa_thres;
  unsigned int sdns_br_aa_thres_step;
  unsigned int sdns_br_aa_thres_dir;
  unsigned int sdns_br_window;
  unsigned int sdns_br_max_thres;
  unsigned int sdns_br_min_thres;
  unsigned int sdns_br_thres_step;
  unsigned int sdns_br_thres_dir;
  unsigned int sdns_br_strength;
  unsigned int sdns_br_slope;
  unsigned int sdns_br_peak_adjust;

  //Sharpen
  unsigned int shrp_mode;
  unsigned int shrp_mask_mode;
  unsigned int shrp_window;
  unsigned int shrp_low_roof;
  unsigned int shrp_high_roof;
  unsigned int shrp_low_stre;
  unsigned int shrp_high_stre;
  unsigned int shrp_alias_low_stre;
  unsigned int shrp_alias_high_stre;

  unsigned int dk_shrp_stre;
  unsigned int br_shrp_stre;

}ncu_param_t;

int ncu_reg_init(ncu_param_t *ptNCU, unsigned int is_ff);

#endif //__NCU_INFO_H
